#ifndef _OBJECT_HPP
#define _OBJECT_HPP

#include <string>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>

using namespace std;

namespace object {
	class Object {
#define _DEBUG_OBJECT_RELEASE 1;
	public:
		Object() {
			_uuid = generateUUid();
		}
		virtual string Type() = 0;
		virtual string examine() = 0;
		//virtual void addRef() = 0;
		//virtual void releaseRef() = 0;
		virtual ~Object() {}

		std::string generateUUid() {
			boost::uuids::uuid a_uuid = boost::uuids::random_generator()();
			return boost::uuids::to_string(a_uuid);
		}

		std::string getUUid() const {
			return _uuid;
		}

	public:
		bool isConst{ false };
		//int _refCount{ 0 };
		//void* ptr{ 0 };
		//bool bindVariable{ false };
		std::string _uuid;
	};
}

#endif // !_OBJECT_HPP
